﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using vudu.ClasesDominio;
using vudu.Logica.Excepciones;
using vudu.Logica.Fachada;
using vudu.Presentacion.Contrato.VU_06_Gestionar_Profesores;

namespace vudu.Presentacion.Presentador.VU_06_Gestionar_Profesores
{
    public class PresentadorConsultarProfesorEscuela
    {
        private IContratoConsultarProfesorEscuela _vista;
        private List<Profesor> _misProfesores = new List<Profesor>();
        private List<Profesor> _misProfesoresMateria = new List<Profesor>();
        private EnlaceLogico _fachada = new EnlaceLogico();
        private Escuela esc;

        public PresentadorConsultarProfesorEscuela(IContratoConsultarProfesorEscuela vista, EnlaceLogico _fachada)
        {
            _vista = vista;
            esc = (Escuela)_fachada.RolActual;
            _vista.ProfesoresEscuela.Visible = false;

        }

        public void ConsultaProfesor(int num)
        {
            try
            {
                _misProfesores = _fachada.consultarProfesores(esc.IdEscuela);
                CargarTabla(_misProfesores, num);
            }
            catch (ConexionExeption e)
            {
                _vista.MensajedeError.CssClass = "transaccionFallida";
                _vista.MensajedeError.Text = "Operacion Fallida: " + e.Message;
                _vista.MensajedeError.Visible = true;
            }
            catch (NoHayProfesoresEscuelaException e)
            {
                _vista.MensajedeError.CssClass = "transaccionFallida";
                _vista.MensajedeError.Text = "Operacion Fallida: " + e.Message;
                _vista.MensajedeError.Visible = true;
            }
        }


        public void CargarMaterias()
        {
            _vista.ListaMaterias.Items.Clear();
            _vista.Consulta.Visible = false;
            _vista.ListaMaterias.Items.Add("- Seleccione una Materia- ");

            // Busca las materias de esa escuela para que se listen en el DropDownList
            List<Materia> listaMaterias = new List<Materia>();
            //Consulto las materias de la escuela
            listaMaterias = _fachada.EnlaceLogicoConsultarMateriaEscuela(esc.IdEscuela);

            //Lleno el segundo DropDownList de la pagina
            _vista.ListaMaterias.DataSource = listaMaterias;
            _vista.ListaMaterias.DataTextField = "nombre";
            _vista.ListaMaterias.DataBind();
            _vista.ListaMaterias.Visible = true;
        
        }
        public void ConsultaProfesorPorMateria(string nombreMateria, int num)
        {
            _misProfesoresMateria = _fachada.EnlaceLogicoConsultarProfesorPorEscuelaMateria(esc.IdEscuela, nombreMateria);
            CargarTablaMateria(_misProfesoresMateria,num);
        }

        public void CargarTabla(List<Profesor> misProfesores, int num)
        {
            _vista.Consulta.Visible = true;
            DataTable tabla = new DataTable();
            tabla.Columns.Add("Nombre", typeof (string));
            tabla.Columns.Add("Apellido", typeof (string));
            tabla.Columns.Add("Email", typeof (string));
            foreach (Profesor profesor in misProfesores)
            {
                string nombreProfesor = profesor.Nombre;
                if (nombreProfesor != null)
                {
                    tabla.Rows.Add(profesor.Nombre, profesor.Apellido, profesor.Email);
                }
            }
            _vista.ProfesoresEscuela.DataSource = tabla;
            _vista.ProfesoresEscuela.DataBind();
            if (num == 1)
            {
                _vista.ProfesoresEscuela.Visible = false;
            }
            else
            {
                _vista.ProfesoresEscuela.Visible = true;
            }
            
        }

        public void CargarTablaMateria(List<Profesor> misProfesores, int num)
        {
            _vista.Consulta.Visible = true;
            DataTable tabla = new DataTable();
            tabla.Columns.Add("Nombre", typeof(string));
            tabla.Columns.Add("Apellido", typeof(string));
            tabla.Columns.Add("Email", typeof(string));
            foreach (Profesor profesor in misProfesores)
            {
                string nombreProfesor = profesor.Nombre;
                if (nombreProfesor != null)
                {
                    tabla.Rows.Add(profesor.Nombre, profesor.Apellido, profesor.Email);
                }
            }
            _vista.ProfesoresEscuelaMateria.DataSource = tabla;
            _vista.ProfesoresEscuelaMateria.DataBind();
            if (num == 1)
            {
                _vista.ProfesoresEscuelaMateria.Visible = false;
            }
            else
            {
                _vista.ProfesoresEscuelaMateria.Visible = true;
                _vista.ProfesoresEscuela.Visible = false;
            }

        }

        public Profesor BuscarProfesor()
        {
            int x = (_vista.ProfesoresEscuela.PageIndex * 8) + _vista.ProfesoresEscuela.SelectedIndex;
            return _misProfesores.ElementAt(x);
        }

        public Profesor BuscarProfesorMateria()
        {
            int xMateria = (_vista.ProfesoresEscuelaMateria.PageIndex * 8) + _vista.ProfesoresEscuelaMateria.SelectedIndex;
            return _misProfesoresMateria.ElementAt(xMateria);
        }


    }
}